package cn.edu.zjusc.Annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

/**
 * 
 * @author 毕伟伦 该类用于通过标注，处理在JPA emerge情况不适用的使用 定制特定的更新字段
 * 
 */
public class PolicySequencer {
	/**
	 * 
	 * @param <T>
	 * @param managedObj
	 *            从数据库中查找(find)出来的实体
	 * @param conditionObj
	 *            JQuery传过来的，带有部分更改信息的
	 */
	public static <T> void absorbObject(T managedObj, T conditionObj,
			Class<? extends Annotation> annotationClass) {
		Field[] fields = managedObj.getClass().getDeclaredFields();
		for (Field fl : fields) {
			if (fl.isAnnotationPresent(annotationClass)) {
				boolean isFieldPrivate = true;

				if (!fl.isAccessible()) {
					isFieldPrivate = false;
					fl.setAccessible(true);
				}

				try {
					Object futherFieldVal = fl.get(conditionObj);
					fl.set(managedObj, futherFieldVal);
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				// 可访问性本来是False
				if (!isFieldPrivate) {
					fl.setAccessible(false);
				}
			}
		}
	}
}
